<!DOCTYPE html>
<html lang="ch-CN">
<head>
    <meta charset="UTF-8">
    <title>工厂方法创建对象</title>
</head>
<style>
    body {
        width: 100%;
        height: 100vh;
        background-color: wheat;
        font-size: 30px;
        text-decoration: none;
        font-family: "华文楷体";
    }
</style>
<script>
    /*
      * 在构造函数中添加了一个sayName方法
      * 也就是构造函数每执行一次就创建一个新的sayName方法(使用(Person1.sayName==Person2.sayName)进行判断是否使用了同一个方法)
      * 所以只需要一个sayName方法实现共享即可
      * 所以可以在构造函数外部写一个函数,在构造函数中写一个方法调用此函数对象即可
     */
    function Person(name, age, gender) {
        this.name = name
        this.age = age
        this.gender = gender
        this.sayName = fun
        // this.sayName = function () {
        //     document.write("name:" + this.name + "age:" + this.age + "gender:" + this.gender + "<br>")
        // }
    }

    function fun() {
        document.write("name:" + this.name + "age:" + this.age + "gender:" + this.gender + "<br>")
    }

    // Person的分类对象实例化
    let Person1 = new Person("小红", 20, "女")
    let Person2 = new Person("小兰", 30, "女")
    let Person3 = new Person("小紫", 26, "男")

    Person1.sayName()
    Person2.sayName()
    Person3.sayName()
    // 控制台查看类别
    console.log(Person1)
    console.log(Person2)
    console.log(Person3)
    // 判断对象是否使用了同一个方法
    document.write(Person1.sayName == Person2.sayName)
</script>
<body>
</body>
</html>